home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1997-03-25 | 6.0 KB | 249 lines |
- 10 'MAXUF - Maximum Usable Frequencies - 25 MAR 97 rev.
- 20 CLS:KEY OFF
- 30 IF EX$=""THEN EX$="EXIT"
- 40 COLOR 7,0,1
- 50 PI=3.14159
- 60 DEF FNAC(X)=-ATN(X/SQR(-X^2+1))+PI/2 'arccos
- 70 DIM M$(37),A$(4),M(12)
- 80 DATA 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
- 90 FOR X=1 TO 12
- 100 READ M(X)
- 110 NEXT X
- 120 M$="JANFEBMARAPRMAYJUNJULAUGSPTOCTNOVDEC
- 130 R0=PI/180
- 140 P1=2*PI
- 150 R1=180/PI
- 160 P0=PI/2
- 170 '
- 180 '.....start
- 190 CLS:COLOR 15,2
- 200 PRINT " MAXIMUM USABLE FREQUENCIES"TAB(57);"by George Murphy VE3ERP ";
- 210 COLOR 1,0:PRINT STRING$(80,"<0xDF!>");
- 220 COLOR 7,0
- 230 IF L1=0 THEN 280
- 240 LOCATE 4:PRINT " Want another AWAY QTH? (y/n) "
- 250 Q$=INKEY$:IF Q$="y"THEN LOCATE CSRLIN-1:WT=-WT:GOTO 390
- 260 IF Q$="n"THEN L1=0:GOTO 180
- 270 GOTO 250
- 280 GOSUB 2000 'preface
- 290 PRINT
- 300 LOCATE ,24:COLOR 0,7:PRINT " Press 1 to continue or 0 to quit ":COLOR 7,0
- 310 Z$=INKEY$:IF Z$=""THEN 310
- 320 IF Z$="0"THEN CLS:RUN EX$
- 330 IF Z$="1"THEN 360
- 340 GOTO 310
- 350 '
- 360 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 4
- 370 INPUT " ENTER: HOME QTH: Latitude (+<UNK! {00F8}> if North, -<UNK! {00F8}> if South) ";LT
- 380 INPUT " Longitude (+<UNK! {00F8}> if East, -<UNK! {00F8}> if West) ";WT
- 390 L1=LT:WT=-WT:W1=WT
- 400 IF LT<0 THEN L1$="S"ELSE L1$="N"
- 410 IF WT<0 THEN W1$="E"ELSE W1$="W"
- 420 PRINT
- 430 INPUT " ENTER: AWAY QTH: Latitude (+<UNK! {00F8}> if North, -<UNK! {00F8}> if South) ";LR
- 440 INPUT " Longitude (+<UNK! {00F8}> if East, -<UNK! {00F8}> if West) ";WR
- 450 L2=LR:WR=-WR:W2=WR
- 460 IF LR<0 THEN L2$="S"ELSE L2$="N"
- 470 IF WR<0 THEN W2$="E"ELSE W2$="W"
- 480 IF Q$="y"THEN 590
- 490 PRINT
- 500 INPUT " ENTER: DATE: Day number..........";D6
- 510 INPUT " Month number........";M0
- 520 PRINT
- 530 INPUT " ENTER: Solar Flux number.............";SF
- 540 IF SF<150 THEN S9=(SF-63)*1.25 ELSE S9=SF-44
- 550 IF S9>0 THEN 590
- 560 BEEP:PRINT" INVALID SUNSPOT NUMBER. "
- 570 GOTO 530
- 580 '
- 590 VIEW PRINT 4 TO 24:CLS:VIEW PRINT:LOCATE 5
- 600 A$=MID$(M$,3*M0-2,3)
- 610 X1$="DATE: \ \ ##"+SPACE$(29)+"From: ###.#<UNK! {00F8}>! ####.#<UNK! {00F8}>!"
- 620 X2$="FLUX: ###"+SPACE$(29)+"To: ###.#<UNK! {00F8}>! ####.#<UNK! {00F8}>!"
- 630 X3$=" HOUR MUF "
- 640 X4$="##.#"
- 650 X5$=" OPEN "
- 660 LOCATE 4,23
- 670 COLOR 0,7:PRINT " MAXIMUM USABLE FREQUENCIES (MHz) ":COLOR 7,0
- 680 PRINT
- 690 PRINT TAB(7)USING X1$;A$,D6,ABS(L1),L1$,ABS(W1),W1$
- 700 PRINT TAB(7)USING X2$;SF,ABS(L2),L2$,ABS(W2),W2$
- 710 GOSUB 1930
- 720 PRINT TAB(7)"DISTANCE:";USING "###,###";DX*1.60937;
- 730 PRINT " km (";USING "##,###";DX;
- 740 PRINT " mi.)";SPC(11);"BEARING:";USING"####<UNK! {00F8}>";BH
- 750 IF DX>250 AND DX<6000 THEN 770
- 760 PRINT" WARNING - ACCURACY IS GREATEST BETWEEN 400 AND 9,600 km."
- 770 PRINT
- 780 FOR X=1 TO 4
- 790 PRINT X3$;
- 800 NEXT X
- 810 PRINT
- 820 L1=L1*R0
- 830 W1=W1*R0
- 840 L2=L2*R0
- 850 W2=W2*R0
- 860 FOR Y=0 TO 5
- 870 FOR X=0 TO 18 STEP 6
- 880 PRINT " ";
- 890 T5=Y+X
- 900 T5$=STR$(T5):T5$=RIGHT$(T5$,LEN(T5$)-1)
- 910 IF LEN(T5$)<2 THEN T5$="0"+T5$:GOTO 910
- 920 T5$=T5$+"00"
- 930 GOSUB 1000
- 940 PRINT T5$;SPC(4)USING X4$;J9;
- 950 IF X<18 THEN PRINT X5$;ELSE PRINT ""
- 960 NEXT X:
- 970 NEXT Y
- 980 GOTO 2320 'end
- 990 '
- 1000 '.....calculation
- 1010 K7=SIN(L1)*SIN(L2)+COS(L1)*COS(L2)*COS(W2-W1)
- 1020 IF K7=>-0.999999 THEN 1050
- 1030 K7=-0.999999
- 1040 GOTO 1070
- 1050 IF K7<=0.999999 THEN 1070
- 1060 K7=0.999999
- 1070 G1=FNAC(K7)
- 1080 K6=1.59*G1
- 1090 IF K6>=1 THEN 1110
- 1100 K6=1
- 1110 K5=1/K6
- 1120 J9=100
- 1130 FOR K1=1/(2*K6) TO 1-1/(2*K6) STEP 0.9999-1/K6
- 1140 IF K5=1 THEN 1160
- 1150 K5=0.5
- 1160 P=SIN(L2)
- 1170 Q=COS(L2)
- 1180 A=(SIN(L1)-P*COS(G1))/(Q*SIN(G1))
- 1190 B=G1*K1
- 1200 C=P*COS(B)+Q*SIN(B)*A
- 1210 D=(COS(B)-C*P)/(Q*SQR(1-C^2))
- 1220 IF D=>-0.999999 THEN 1250
- 1230 D=-0.999999
- 1240 GOTO 1270
- 1250 IF D<=0.999999 THEN 1270
- 1260 D=0.999999
- 1270 D=FNAC(D)
- 1280 W0=W2+SGN(SIN(W1-W2))*D
- 1290 IF W0=>0 THEN 1310
- 1300 W0=W0+P1
- 1310 IF W0<P1 THEN 1330
- 1320 W0=W0-P1
- 1330 IF C=>-0.999999 THEN 1360
- 1340 C=-0.999999
- 1350 GOTO 1380
- 1360 IF C<=0.999999 THEN 1380
- 1370 C=0.999999
- 1380 L0=P0-FNAC(C)
- 1390 Y1=0.0172*(10+(M0-1)*30.4+D6)
- 1400 Y2=0.409*COS(Y1)
- 1410 K8=3.82*W0+12+0.13*(SIN(Y1)+1.2*SIN(2*Y1))
- 1420 K8=K8-12*(1+SGN(K8-24))*SGN(ABS(K8-24))
- 1430 IF COS(L0+Y2)>-0.26 THEN 1520
- 1440 K9=0
- 1450 G0=0
- 1460 M9=2.5*G1*K5
- 1470 IF M9<=P0 THEN 1490
- 1480 M9=P0
- 1490 M9=SIN(M9)
- 1500 M9=1+2.5*M9*SQR(M9)
- 1510 GOTO 1770
- 1520 K9=(-0.26+SIN(Y2)*SIN(L0))/(COS(Y2)*COS(L0)+0.000999999)
- 1530 K9=12-ATN(K9/SQR(ABS(1-K9*K9)))*7.63944
- 1540 T=K8-K9/2+12*(1-SGN(K8-K9/2))*SGN(ABS(K8-K9/2))
- 1550 T4=K8+K9/2-12*(1+SGN(K8+K9/2-24))*SGN(ABS(K8+K9/2-24))
- 1560 C0=ABS(COS(L0+Y2))
- 1570 T9=9.7*C0^9.6
- 1580 IF T9>0.1 THEN 1600
- 1590 T9=0.1
- 1600 M9=2.5*G1*K5
- 1610 IF M9<=P0 THEN 1630
- 1620 M9=P0
- 1630 M9=SIN(M9)
- 1640 M9=1+2.5*M9*SQR(M9)
- 1650 IF T4<T THEN 1680
- 1660 IF (T5-T)*(T4-T5)>0 THEN 1690
- 1670 GOTO 1820
- 1680 IF (T5-T4)*(T-T5)>0 THEN 1820
- 1690 T6=T5+12*(1+SGN(T-T5))*SGN(ABS(T-T5))
- 1700 G9=PI*(T6-T)/K9
- 1710 G8=PI*T9/K9
- 1720 U=(T-T6)/T9
- 1730 G0=C0*(SIN(G9)+G8*(EXP(U)-COS(G9)))/(1+G8*G8)
- 1740 G7=C0*(G8*(EXP(-K9/T9)+1))*EXP((K9-24)/2)/(1+G8*G8)
- 1750 IF G0=>G7 THEN 1770
- 1760 G0=G7
- 1770 G2=(1+S9/250)*M9*SQR(6+58*SQR(G0))
- 1780 G2=G2*(1-0.1*EXP((K9-24)/3))
- 1790 G2=G2*(1+(1-SGN(L1)*SGN(L2))*0.1)
- 1800 G2=G2*(1-0.1*(1+SGN(ABS(SIN(L0))-COS(L0))))
- 1810 GOTO 1880
- 1820 T6=T5+12*(1+SGN(T4-T5))*SGN(ABS(T4-T5))
- 1830 G8=PI*T9/K9
- 1840 U=(T4-T6)/2
- 1850 U1=-K9/T9
- 1860 G0=C0*(G8*(EXP(U1)+1))*EXP(U)/(1+G8*G8)
- 1870 GOTO 1770
- 1880 IF G2>J9 THEN 1900
- 1890 J9=G2
- 1900 NEXT K1
- 1910 RETURN
- 1920 '
- 1930 '.....distance & bearing
- 1940 DW=FNAC(SIN(LT*R0)*SIN(LR*R0)+COS(LT*R0)*COS(LR*R0)*COS(ABS(WT-WR)*R0))
- 1950 DX=DW*60*1.1508*180/PI
- 1960 H=FNAC((SIN(LR*R0)-SIN(LT*R0)*COS(DW))/(SIN(DW)*COS(LT*R0)))
- 1970 IF SIN(WR*R0-WT*R0)<0 THEN BH=H/R0 ELSE BH=360-H/R0
- 1980 RETURN
- 1990 '
- 2000 '.....preface
- 2010 TB=8
- 2020 PRINT TAB(TB);
- 2030 PRINT "This program is an edited version of MINIMUF 3.5, from QST,"
- 2040 PRINT TAB(TB);
- 2050 PRINT "December 1982, pp.36-38"
- 2060 PRINT
- 2070 PRINT TAB(TB);
- 2080 PRINT "The program computes maximum usable frequency by hour, given two"
- 2090 PRINT TAB(TB);
- 2100 PRINT "end points of the path, date, and solar flux.
- 2110 PRINT
- 2120 PRINT TAB(TB);
- 2130 PRINT "Solar flux number for the day is transmitted by WWV at 18 minutes"
- 2140 PRINT TAB(TB);
- 2150 PRINT "after the hour."
- 2160 PRINT
- 2170 PRINT TAB(TB);
- 2180 PRINT "Times displayed in this program are Local Standard Times."
- 2190 PRINT
- 2200 PRINT TAB(TB);
- 2210 PRINT "The program asks you to enter the latitude and longitude of your"
- 2220 PRINT TAB(TB);
- 2230 PRINT "home QTH, and of the DX location at the other end of the path."
- 2240 PRINT TAB(TB);
- 2250 PRINT "The DX latitude and longitude can be found by HAMCALC in either"
- 2260 PRINT TAB(TB);
- 2270 PRINT "the Latitude/Longitude Data Base program, or the Grid Square"
- 2280 PRINT TAB(TB);
- 2290 PRINT "Locator program."
- 2300 RETURN
- 2310 '
- 2320 '.....end
- 2330 GOSUB 2360:GOTO 180
- 2340 END
- 2350 '
- 2360 'HARDCOPY
- 2370 GOSUB 2480:LOCATE 25,2:COLOR 14,6
- 2380 PRINT " Press 1 to print screen, 2 to print screen & ";
- 2390 PRINT "advance paper, or 3 to continue.";:COLOR 7,0
- 2400 Z$=INKEY$:IF Z$="3"THEN GOSUB 2480:RETURN
- 2410 IF Z$="1"OR Z$="2"THEN GOSUB 2480:GOTO 2430
- 2420 GOTO 2400
- 2430 FOR QX=1 TO 24:FOR QY=1 TO 80
- 2440 LPRINT CHR$(SCREEN(QX,QY));
- 2450 NEXT QY:NEXT QX
- 2460 IF Z$="2"THEN LPRINT CHR$(12)
- 2470 GOTO 2370
- 2480 LOCATE 25,1:PRINT STRING$(80,32);:RETURN
-